// database_handler.h
#ifndef DATABASE_HANDLER_H
#define DATABASE_HANDLER_H

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include "server_user.h"

class DatabaseHandler : public QObject {
    Q_OBJECT
public:
    explicit DatabaseHandler(QObject *parent = nullptr) : QObject(parent) {}

    // ================== 数据库连接 ==================
    /**
     * @brief 连接到MySQL数据库
     * @param host 数据库主机名（默认localhost）
     * @param dbName 数据库名
     * @param username 数据库用户名
     * @param password 数据库密码
     * @param port 数据库端口（默认3306）
     * @return 连接成功返回true，失败返回false
     */
    bool connectToDatabase(
        const QString &host = "localhost",
        const QString &dbName = "chat_server",
        const QString &username = "root",
        const QString &password = "your_mysql_password",
        int port = 3306
        ) {
        // 移除已存在的同名连接（避免重复连接）
        QSqlDatabase::removeDatabase("MYSQL_CONNECTION");

        // 创建数据库连接对象
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "MYSQL_CONNECTION");
        db.setHostName(host);
        db.setDatabaseName(dbName);
        db.setUserName(username);
        db.setPassword(password);
        db.setPort(port);

        // 尝试打开连接
        if (db.open()) {
            qDebug() << "【数据库】连接成功";
            return true;
        } else {
            qDebug() << "【数据库】连接失败：" << db.lastError().text();
            return false;
        }
    }

    // ================== 用户登录验证 ==================
    /**
     * @brief 验证用户登录信息
     * @param username 用户名
     * @param password 密码（明文）
     * @return 验证成功返回true，失败返回false
     */
    bool verifyLogin(const QString &username, const QString &password) {
        QSqlDatabase db = QSqlDatabase::database("MYSQL_CONNECTION");
        QSqlQuery query(db);

        // 参数化查询防止SQL注入（即使密码明文，仍需参数化）
        QString sql = "SELECT password FROM users WHERE username = :username";
        query.prepare(sql);
        query.bindValue(":username", username);

        if (!query.exec()) {
            qDebug() << "【数据库】查询失败：" << query.lastError().text();
            return false;
        }

        // 检查查询结果
        if (query.next()) {
            QString storedPassword = query.value(0).toString();
            return storedPassword == password; // 明文对比（仅演示）
        }
        return false; // 用户名不存在
    }

    // ================== 关闭连接 ==================
    void closeConnection() {
        QSqlDatabase db = QSqlDatabase::database("MYSQL_CONNECTION");
        if (db.isOpen()) {
            db.close();
            qDebug() << "【数据库】连接已关闭";
        }
    }
};

#endif // DATABASE_HANDLER_H
